package com.psc.view.utils.glide;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.psc.R;
import com.psc.view.main.ProxyApplication;

/**
 * Creat:Yx
 * Date:2020/7/17
 * Description: Glide图片加载工具类
 * 可加载静态、动态图、视频第一帧
 */
public class GlideUtils {


    /**
     * 普通 图片加载工具类
     *
     * @param imageUrl
     * @param imageView
     */
    public static void setImages(String imageUrl, ImageView imageView) {
        if (imageUrl == null || "".equals(imageUrl)) {
            return;
        }
        Glide.with(ProxyApplication.getInstance())
                .load(imageUrl)
                .into(imageView);

    }

    /**
     * 普通 图片加载工具类
     * 旋转90度
     *
     * @param imageUrl
     * @param imageView
     */
    public static void setImagesRotate90(String imageUrl, ImageView imageView) {
        if (imageUrl == null || "".equals(imageUrl)) {
            return;
        }
        Glide.with(ProxyApplication.getInstance())
                .load(imageUrl)
                .transform(new RotateTransformation(ProxyApplication.getInstance(), 90f))
                .into(imageView);

    }

    /**
     * 普通 图片加载工具类
     * 自定义旋转角度
     *
     * @param imageUrl
     * @param imageView
     */
    public static void setImagesRotate(float rotate, String imageUrl, ImageView imageView) {
        if (imageUrl == null || "".equals(imageUrl)) {
            return;
        }
        Glide.with(ProxyApplication.getInstance())
                .load(imageUrl)
                .transform(new RotateTransformation(ProxyApplication.getInstance(), rotate))
                .into(imageView);

    }

    /**
     * 普通 图片加载工具类
     * 加载Uri图片
     *
     * @param imageUri
     * @param imageView
     */
    public static void setImages(Uri imageUri, ImageView imageView) {
        if (imageUri == null || "".equals(imageUri)) {
            return;
        }
        Glide.with(ProxyApplication.getInstance())
                .load(imageUri)
                .into(imageView);

    }


    /**
     * 普通 图片加载工具类
     * 加载资源ID图片
     *
     * @param imageResId
     * @param imageView
     */
    public static void setImages(int imageResId, ImageView imageView) {
        Glide.with(ProxyApplication.getInstance())
                .load(imageResId)
                .into(imageView);

    }


    /**
     * 圆形 头像加载工具类
     *
     * @param imageUrl  图片地址
     * @param imageView view
     */
    public static void setImageCircle(String imageUrl, ImageView imageView) {
        //4.8版
        Glide.with(ProxyApplication.getInstance()).load(imageUrl)
                .apply(RequestOptions.circleCropTransform()
                        .error(R.drawable.icon_default_photo)).into(imageView);
        //3.8版
//        if (imageUrl == null || "".equals(imageUrl)) {
//            return;
//        }
//        Glide.with(EduApplication.getInstance()).load(imageUrl)
//                .asBitmap()//显示静态图片（若加载的是gif图那么就会显示第一帧的图片）
//                //.asGif()//显示动态图片（若加载的是静态图会加载失败）
//                //.centerCrop()//缩放图像让它填充到ImageView界限内充满,如果过大额外部分被裁剪
//                .skipMemoryCache(false)//禁止内存缓存
//                .diskCacheStrategy(DiskCacheStrategy.NONE)////禁止磁盘缓存（Glide默认缓存策略是：DiskCacheStrategy.RESULT）
//                .override(100, 100)//加载图片为100*100像素的尺寸
//                .transform(new GlideCircleTransform(EduApplication.getInstance()))//圆形图片
//                .error(R.drawable.icon_def_head)
//                .into(imageView);
    }

    /**
     * 圆形 头像加载工具类
     * 加载圆形本地资源图片
     *
     * @param imageView view
     */
    public static void setImageCircle(Drawable drawable, ImageView imageView) {
        Glide.with(ProxyApplication.getInstance()).load(drawable)
                .apply(RequestOptions.circleCropTransform()
                        .error(R.drawable.icon_default_photo)).into(imageView);
        //3.8版
//        if (drawable == null || "".equals(drawable)) {
//            return;
//        }
//        Glide.with(EduApplication.getInstance()).load(drawable)
//                .asBitmap()//显示静态图片（若加载的是gif图那么就会显示第一帧的图片）
//                //.asGif()//显示动态图片（若加载的是静态图会加载失败）
//                //.centerCrop()//缩放图像让它填充到ImageView界限内充满,如果过大额外部分被裁剪
//                .skipMemoryCache(false)//禁止内存缓存
//                .diskCacheStrategy(DiskCacheStrategy.NONE)////禁止磁盘缓存（Glide默认缓存策略是：DiskCacheStrategy.RESULT）
//                .override(100, 100)//加载图片为100*100像素的尺寸
//                .transform(new GlideCircleTransform(EduApplication.getInstance()))//圆形图片
//                .into(imageView);
    }

    /**
     * 圆形 头像加载工具类
     * 加载圆形Uri图片
     *
     * @param uri       图片地址
     * @param imageView view
     */
    public static void setImageCircle(Uri uri, ImageView imageView) {
        Glide.with(ProxyApplication.getInstance()).load(uri)
                .apply(RequestOptions.circleCropTransform()
                        .error(R.drawable.icon_default_photo)).into(imageView);
        //3.8版
//        if (uri == null || "".equals(uri)) {
//            return;
//        }
//        Glide.with(EduApplication.getInstance()).load(uri)
//                .asBitmap()//显示静态图片（若加载的是gif图那么就会显示第一帧的图片）
//                //.asGif()//显示动态图片（若加载的是静态图会加载失败）
//                //.centerCrop()//缩放图像让它填充到ImageView界限内充满,如果过大额外部分被裁剪
//                .skipMemoryCache(false)//禁止内存缓存
//                .diskCacheStrategy(DiskCacheStrategy.NONE)////禁止磁盘缓存（Glide默认缓存策略是：DiskCacheStrategy.RESULT）
//                .override(100, 100)//加载图片为100*100像素的尺寸
//                .transform(new GlideCircleTransform(EduApplication.getInstance()))//圆形图片
//                .into(imageView);

    }


    /**
     * 圆角 图片加载工具类4.8
     *
     * @param imageUrl  图片地址
     * @param imageView view
     */
    public static void setImageFillet(String imageUrl, ImageView imageView) {
        //设置图片圆角角度
        RoundedCorners roundedCorners = new RoundedCorners(dpToPx(5));
        //通过RequestOptions扩展功能,override:采样率,因为ImageView就这么大,可以压缩图片,降低内存消耗
        RequestOptions options = RequestOptions.bitmapTransform(roundedCorners).override(200, 200);

        Glide.with(ProxyApplication.getInstance()).load(imageUrl)
                .apply(options.error(R.drawable.bg_default_white)).into(imageView);
    }

    /**
     * 获取视频第一帧
     * 有个0- 到1秒的延迟
     *
     * @param context         上下文
     * @param uri             视频地址
     * @param imageView       设置image
     * @param frameTimeMicros 获取某一时间帧 4000000 = 4s  1s=1000ms 4s=4000ms 4000ms=4000000us
     */
    @SuppressLint("CheckResult")
    public static void loadVideoScreenshot(final Context context, String uri, ImageView imageView, long frameTimeMicros) {
        Glide.with(context)
                .setDefaultRequestOptions(
                        new RequestOptions()
                                .frame(frameTimeMicros)
                                .centerCrop()
                )
                .load(uri)
                .into(imageView);

    }

    private static int dpToPx(int dp) {
        float scale = Resources.getSystem().getDisplayMetrics().density;
        return (int) (dp * scale + 0.5f);
    }
}
